<template>
    <view class="content">
		<view class="">
		    <view class="input-row" style="text-align: center;margin-top: 100upx;">
		        <img src="../../static/img/common/douban.png" style="width: 200upx;height: 200upx;margin: 0 auto;">
		    </view>
		</view>
        <view class="input-group">
            <view class="input-row border">
                <text class="title">账号：</text>
                <m-input class="m-input" type="text" clearable focus v-model="account" placeholder="请输入邮箱/用户名"></m-input>
            </view>
            <view class="input-row">
                <text class="title">密码：</text>
                <m-input type="password" displayable v-model="password" placeholder="请输入密码"></m-input>
            </view>
        </view>
        <view class="btn-row">
            <button type="primary" style="background: #228A31;" class="primary" @tap="bindLogin">登录</button>
        </view>
        <view class="oauth-row" v-if="hasProvider" v-bind:style="{top: positionTop + 'px'}">
            <view class="oauth-image" v-for="provider in providerList" :key="provider.value">
                <image :src="provider.image" @tap="oauth(provider.value)"></image>
            </view>
        </view>
    </view>
</template>

<script>
    import service from '../../common/service.js';
    import {
        mapMutations
    } from 'vuex'
    import mInput from '../../components/m-input.vue'

    export default {
        components: {
            mInput
        },
        data() {
            return {
                providerList: [],
                hasProvider: false,
                account: '13733422488',
                password: 'panpanWD12',
                positionTop: 0
            }
        },
        methods: {
            ...mapMutations(['login']),
            initPosition() {
                /**
                 * 使用 absolute 定位，并且设置 bottom 值进行定位。软键盘弹出时，底部会因为窗口变化而被顶上来。
                 * 反向使用 top 进行定位，可以避免此问题。
                 */
                this.positionTop = uni.getSystemInfoSync().windowHeight - 100;
            },
            bindLogin() {
				var that = this;
                /**
                 * 客户端对账号信息进行一些必要的校验。
                 * 实际开发中，根据业务需要进行处理，这里仅做示例。
                 */
                if (this.account.length < 2) {
                    uni.showToast({
                        icon: 'none',
                        title: '账号最短为 2 个字符'
                    });
                    return;
                }
                if (this.password.length < 3) {
                    uni.showToast({
                        icon: 'none',
                        title: '密码最短为 3 个字符'
                    });
                    return;
                }
                /**
                 * 下面简单模拟下服务端的处理
                 * 检测用户账号密码是否在已注册的用户列表中
                 * 实际开发中，使用 uni.request 将账号信息发送至服务端，客户端在回调函数中获取结果信息。
                 */
				uni.showLoading({title:"loading..."})
				var data = {"client_id":"02f7751a55066bcb08e65f4eff134361", "client_secret":"63cf04ebd7b0ff3b", "redirect_uri":"http://douban.fm","grant_type":"password"}
				data.username = this.account;
				data.password = this.password;
				uni.request({
					url:'https://bukaa.cn/api-cms/fm/douban/getToken',
					method:'GET',
					data: data,
					success:function(res){
						console.log(res);
						if(res.statusCode === 200){
							if(res.data.data && res.data.data.access_token){
								uni.hideLoading();
								var doubanAuth = res.data.data;
								service.setDoubanAuth(doubanAuth);
								uni.navigateBack({});
							}else{
								uni.hideLoading();
								uni.showToast({
								    icon: 'none',
								    title: '用户账号或密码不正确',
								});
							}
						}else{
							uni.hideLoading();
							uni.showToast({
							    icon: 'none',
							    title: '系统错误!',
							});
						}
					},error(){
						uni.hideLoading();
						uni.showToast({
						    icon: 'none',
						    title: '网络出错了...',
						});
					}
				})
            },
            oauth(value) {
                uni.login({
                    provider: value,
                    success: (res) => {
                        uni.getUserInfo({
                            provider: value,
                            success: (infoRes) => {
                                /**
                                 * 实际开发中，获取用户信息后，需要将信息上报至服务端。
                                 * 服务端可以用 userInfo.openId 作为用户的唯一标识新增或绑定用户信息。
                                 */
                                this.toMain(infoRes.userInfo.nickName);
                            }
                        });
                    },
                    fail: (err) => {
                        console.error('授权登录失败：' + JSON.stringify(err));
                    }
                });
            },
			loadUser(token) {
				uni.request({
					url:'https://bukaa.cn/api-admin/user/currentUser',
					header:{"Authorization":token},
					success:function(res){
						if(res.statusCode === 200){
							if(res.data.status === 'ok'){
								uni.setStorageSync('userInfo', res.data.data);
								uni.reLaunch({
								    url: '../list/list',
								});
							}else{
								uni.showToast({
								    icon: 'none',
								    title: '用户账号或密码不正确',
								});
							}
						}else{
							uni.showToast({
							    icon: 'none',
							    title: '系统错误!',
							});
						}
					},
					error:function(){
						uni.navigateBack();
					},complete() {
						uni.hideLoading();
					}
				})
			
			},
            toMain(userName) {
                this.login(userName);
                /**
                 * 强制登录时使用reLaunch方式跳转过来
                 * 返回首页也使用reLaunch方式
                 */
                if (this.forcedLogin) {
                    uni.reLaunch({
                        url: '../main/main',
                    });
                } else {
                    uni.navigateBack();
                }

            }
        },
        onLoad() {
            this.initPosition();
        }
    }
</script>

<style>
	page {
	    min-height: 100%;
	    display: flex;
		top: var(--window-top);
		bottom: var(--window-bottom);
	}
	.content {
	    display: flex;
	    flex: 1;
	    flex-direction: column;
	    background-color: #efeff4;
	    padding: 20upx;
	}
    .action-row {
        display: flex;
        flex-direction: row;
        justify-content: center;
    }

    .action-row navigator {
        color: #007aff;
        padding: 0 20upx;
    }

    .oauth-row {
        display: flex;
        flex-direction: row;
        justify-content: center;
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
    }

    .oauth-image {
        width: 100upx;
        height: 100upx;
        border: 1upx solid #dddddd;
        border-radius: 100upx;
        margin: 0 40upx;
        background-color: #ffffff;
    }

    .oauth-image image {
        width: 60upx;
        height: 60upx;
        margin: 20upx;
    }
</style>
